我有以下代码片段:
int x=2,y=3; if ( (y == x++) | (x < ++y) ) // rest of code
我知道在C ++中,您被教导不要依赖子表达式的求值顺序,因为它不能保证完全是任何顺序。因此,此代码将是错误的,并且不能保证条件中表达式所产生的布尔值是真实的(例如,可以在第一次等式测试中对y进行递增运算)。由于我是在Java认证书中阅读此代码的,因此我认为Java并非如此。.我的意思是,我是否保证Java的评估顺序始终是从左到右?因此,以上表达式应始终为true。
是的,保证可以从左到右执行-至少要像执行一样。这在JLS 15.7中定义:
Java编程语言保证运算符的操作数似乎按特定的评估顺序(即从左到右)进行评估。
运算|符的第一个操作数将得出3 == 2,并得出false,但是第二个操作数将得出3 <4,并得出true。
|
话虽如此,我绝对会避免需要非常仔细阅读的代码…